﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

/*
 场景题 1：配置管理器
 场景描述：
     你的应用程序需要一个全局的配置管理器，它负责加载和管理应用程序的配置信息。
     无论在应用程序的哪个部分访问配置管理器，它都应该使用同一个实例，以确保配置信息的一致性和节省资源。
 练习要求：
     实现一个单例模式的配置管理器类。
     确保配置管理器类在整个应用程序中只有一个实例。
     提供一个方法来加载配置文件，并提供一个方法来获取配置值。
 */
namespace CS_BEGINNER_TO_PROFICIENT.DesignPatterns.CreationMode.SingletonPattern.Practice
{
    public class ConfigurationManager
    {
        private static readonly Lazy<ConfigurationManager> _instance = new Lazy<ConfigurationManager>(() => new ConfigurationManager());
        private readonly Dictionary<string, string> _configurations;

        private ConfigurationManager()
        {
            _configurations = new Dictionary<string, string>();
            LoadConfigurations();
        }

        public static ConfigurationManager Instance => _instance.Value;

        private void LoadConfigurations()
        {
            var configFilePath = @"./../../DesignPatterns/CreationMode/SingletonPattern/Practice/config.txt";
            if (File.Exists(configFilePath))
            {
                foreach (var line in File.ReadAllLines(configFilePath))
                {
                    var parts = line.Split('=');
                    if (parts.Length == 2)
                    {
                        _configurations[parts[0].Trim()] = parts[1].Trim();
                    }
                }
            }
        }

        public string GetConfigValue(string key)
        {
            return _configurations.TryGetValue(key, out var value) ? value : null;
        }
    }
}
